package com.kim.rssreader.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.content.Context;
import android.text.Html;

import com.kim.rssreader.R;

public class RssSourceReader {

	public static final int RSS_CATEGORY_SINA = 0;
	public static final int RSS_CATEGORY_IFENG = 1;
	public static final String ENCODING = "utf-8";
//
//	public static final String IFENG_START_TAG = "<!--mainContent begin-->";
//	public static final String IFENG_END_TAG = "<!--mainContent end-->";
//	public static final String SINA_START_TAG = "<!-- 正文内容 begin -->";
//	public static final String SINA_END_TAG = "<!-- 正文内容 end -->";
//
//	/**
//	 * 
//	 * @param context
//	 * @param category
//	 * @param id
//	 * @return
//	 */
//	public static HashMap<String, String> getRssByCategory(Context context,
//			int category, String id) {
//		int resourceId = R.raw.sina_all_opml;
//		// 解析XML文件
//		SAXParserFactory factory = SAXParserFactory.newInstance();
//		SAXParser parser = null;
//		XMLReader xmlreader = null;
//		RssHandler handler = null;
//		InputStreamReader isr = null;
//		InputSource is = null;
//		InputStream inputStream = null;
//		try {
//			handler = new RssHandler();
//			handler.setId(id);
//			if (category == RSS_CATEGORY_SINA) {
//				resourceId = R.raw.sina_all_opml;
//				handler.setIsSina(true);
//			} else if (category == RSS_CATEGORY_IFENG) {
//				resourceId = R.raw.ifeng_all_opml;
//				handler.setIsSina(false);
//			}
//			parser = factory.newSAXParser();
//			xmlreader = parser.getXMLReader();
//			xmlreader.setContentHandler(handler);
//			inputStream = context.getResources().openRawResource(resourceId);
//			isr = new InputStreamReader(inputStream, ENCODING);
//			is = new InputSource(isr);
//			xmlreader.parse(is);
//		} catch (Exception e) {
//			e.printStackTrace();
//			return null;
//		} finally {
//			if (inputStream != null) {
//				try {
//					inputStream.close();
//					inputStream = null;
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (isr != null) {
//				try {
//					isr.close();
//					isr = null;
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (is != null) {
//				is = null;
//			}
//		}
//		return handler.getRssItems();
//	}
//
//	/**
//	 * 解析Rss类别
//	 * 
//	 * @param context
//	 * @param category
//	 * @return
//	 */
//	public static String[] getCategory(Context context, int category) {
//
//		int resourceId = R.raw.sina_all_opml;
//
//		// 解析XML文件
//		SAXParserFactory factory = SAXParserFactory.newInstance();
//		SAXParser parser = null;
//		XMLReader xmlreader = null;
//		RssHandler handler = null;
//		InputStreamReader isr = null;
//		InputSource is = null;
//		InputStream inputStream = null;
//		try {
//			handler = new RssHandler();
//			handler.setIsCategory(true);
//			if (!RssHandler.needsParser(category)) {
//				return handler.getRssCategory();
//			}
//			if (category == RSS_CATEGORY_SINA) {
//				resourceId = R.raw.sina_all_opml;
//				handler.setIsSina(true);
//			} else if (category == RSS_CATEGORY_IFENG) {
//				resourceId = R.raw.ifeng_all_opml;
//				handler.setIsSina(false);
//			}
//			parser = factory.newSAXParser();
//			xmlreader = parser.getXMLReader();
//			xmlreader.setContentHandler(handler);
//			inputStream = context.getResources().openRawResource(resourceId);
//			isr = new InputStreamReader(inputStream, ENCODING);
//			is = new InputSource(isr);
//			xmlreader.parse(is);
//		} catch (Exception e) {
//			e.printStackTrace();
//			return null;
//		} finally {
//			if (inputStream != null) {
//				try {
//					inputStream.close();
//					inputStream = null;
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (isr != null) {
//				try {
//					isr.close();
//					isr = null;
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (is != null) {
//				is = null;
//			}
//		}
//		return handler.getRssCategory();
//	}

	public static String inputStream2String(InputStream inputStream) {
		try {
			if (null == inputStream || inputStream.available() == 0) {
				return "";
			}
			ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(
					inputStream.available());
			byte[] buffer = new byte[1024];
			int len = -1;
			while ((len = inputStream.read(buffer)) != -1) {
				arrayOutputStream.write(buffer, 0, len);
			}
			return getRightEncodingContent(arrayOutputStream);
		} catch (IOException e) {
			e.printStackTrace();
			return "";
		} finally {
			if (null != inputStream) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}

			}
		}

	}

	public static String fmtString(String str) {
		String notice = "";
		try {
			notice = URLEncoder.encode(str, "utf-8");
		} catch (Exception ex) {
			return str;
		}
		return notice;
	}

	public static String getRightEncodingContent(
			ByteArrayOutputStream arrayOutputStream)
			throws UnsupportedEncodingException {
		String orignalData = null;

		if (arrayOutputStream == null
				|| arrayOutputStream.toByteArray() == null) {
			return "";
		} else {
			orignalData = new String(arrayOutputStream.toByteArray());
		}

		int encodingIndex = orignalData.indexOf("charset");
		String encoding = "gbk";
		if (encodingIndex > -1) {

			encodingIndex = orignalData.indexOf("=", encodingIndex);
			int encodingIndexEnd = orignalData.indexOf(">", encodingIndex);
			if (encodingIndexEnd > -1) {
				encoding = orignalData.substring(encodingIndex,
						encodingIndexEnd);
				if (encoding != null) {
					encoding = encoding.replaceAll("\"", "");
					encoding = encoding.replaceAll("\'", "");
					encoding = encoding.replaceAll("/", "");
					encoding = encoding.replaceAll(" *", "");
					encoding = encoding.replaceAll("=", "");
				}
			}
		}
		return new String(arrayOutputStream.toByteArray(), encoding);
	}
	


}
